package com.zf.zf_demo.service;

import com.zf.zf_demo.converter.StudentConverter;
import com.zf.zf_demo.dao.Student;
import com.zf.zf_demo.dao.StudentRepository;
import com.zf.zf_demo.dto.StudentDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PathVariable;

import java.util.List;
@Service
public class StudentServiceImpl implements StudentService {
    @Autowired//这个注解用于自动装配Spring容器中的bean
    private StudentRepository studentRepository;//接口实现StudentRepository通常是一个用于访问数据库中的学生信息。
    //通过id查询信息
    @Override
    public StudentDTO getStudentById(int id) {
        Student student= studentRepository.findById(id).orElseThrow(RuntimeException::new);
       return StudentConverter.studentDTO(student);//转换后的StudentDTO对象被返回。得到包含学生详细信息的DTO对象，而不必直接处理实体对象
    }
    //DTO是一种常用的设计模式，用于在应用程序的不同层之间传输数据，特别是在需要跨越网络边界时。
    //DTO通常只包含需要传输的数据，不包含任何业务逻辑或持久化逻辑。
    //添加学生
      @Override
    public Integer addNewStudent(StudentDTO studentDTO) {
      List<Student> studentList=studentRepository.findByEmail(studentDTO.getEmail());
      if(!CollectionUtils.isEmpty(studentList)){
          throw new IllegalStateException("email"+studentDTO.getEmail()+"已经被占用");
      }
      Student student=studentRepository.save(StudentConverter.studentDTO(studentDTO));
        return student.getId();
    }

    @Override
    public void deleteStudentById(int id) {
        studentRepository.findById(id).orElseThrow(()->new IllegalArgumentException("id"+id+"不存在"));
        studentRepository.deleteById(id);
    }

    @Override
    public StudentDTO updateStudentById(int id, String name, String email) {
        Student studentDB=studentRepository.findById(id).orElseThrow(()->new IllegalArgumentException("id"+id+"不存在"));
        if(StringUtils.hasLength(name)&&!studentDB.getName().equals(name)){
            studentDB.setName(name);
        }
        if(StringUtils.hasLength(email)&&!studentDB.getEmail().equals(email)){
            studentDB.setEmail(email);
        }
        Student student=studentRepository.save(studentDB);
        return StudentConverter.studentDTO(student);
    }


}
